package com.java8.stream;

import com.java8.lambda.Employee;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * stream操作分三个步骤
 * 1.创建Stream
 * 一个数据源，集合或者数组，获取一个流
 * 2.中间操作
 * 一个中间操作链，对数据源进行处理
 * 3.终止操作(终端操作)
 * 一个终止操作，执行中间操作链，并产生结果
 */
public class TestStreamAPI {
    //1.如何创建Stream
    @Test
    public void test1() {
        //1.可以通过Collection 系列集合提供的stream()或parallelStream()
        List<String> stringList = new ArrayList<>();
        Stream<String> stringStream = stringList.stream();

        //2.通过Arrays中的静态方法stream()获取数组流
        Employee[] employee = new Employee[10];
        Stream<Employee> stream2 = Arrays.stream(employee);

        //3.通过Stream类中的静态方法of()
        Stream<String> stream3 = Stream.of("aa", "bb", "cc");

        //4.创建无限流
        //迭代
        Stream<Integer> iterate = Stream.iterate(0, (x) -> x + 2);
        iterate.forEach(System.out::println);

        //生成
        Stream.generate(Math::random).limit(5).forEach(System.out::println);


    }
}
